博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之工厂模式
阅读量:6555 次
发布时间:2019-06-24

本文共 4007 字,大约阅读时间需要 13 分钟。

1.创建抽象工厂

package designModel.factoryModel;//创建一个抽象的工厂,其中定义了一个方法,用来创建商品public abstract class AbstractFactory {    public abstract 
T createGood(Class c);}

2.创建工厂

package designModel.factoryModel;//这个工厂用来生产对象,用来生产商品public class Factory extends AbstractFactory {        //通过传进来的类名,创建相应的商品    public  
T createGood(Class c){ GoodInterface good=null; try { good = (GoodInterface) Class.forName(c.getName()).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("创建相应的商品对象异常"); e.printStackTrace(); } return (T)good; }}

3. 创建商品接口

package designModel.factoryModel;//定义所有商品共有的方法public interface GoodInterface {    //定义商品输出价格的方法    public void printPrice();    //定义商品输出商品名字的方法    public void printName();}

4.实现商品接口的商品

package designModel.factoryModel;public class GoodA  implements GoodInterface{    @Override    public void printPrice() {        System.out.println("GoodA price");    }    @Override    public void printName() {        System.out.println("GoodA name");    }}package designModel.factoryModel;//定义了商品Bpublic class GoodB implements GoodInterface{    public GoodB() {    }    @Override    public void printPrice() {        System.out.println("GoodB price");    }    @Override    public void printName() {        System.out.println("GoodB name");    }}

4.测试工厂模式

@Test    public void testAbstractFactory() {        AbstractFactory abstractFactory;        try {            abstractFactory = Factory.class.newInstance();            GoodInterface goodA = abstractFactory.createGood(GoodA.class);            goodA.printName();            goodA.printPrice();        } catch (InstantiationException | IllegalAccessException e) {            e.printStackTrace();        }    }

5.变种

1)、简单工厂模式

与上述的工厂模式的区别,上述工厂模式继承一个抽象类,实现抽象类的方法,来创建商品对象,简单工厂模式继承一个抽象类,而是通过自己的本身的静态方法去创建商品对象,该模式是工厂方法模式的弱化,所以叫简单工厂模式,也叫做静态工厂模式。

a、工厂类

package designModel.factoryModel;//这个工厂用来生产对象,用来生产商品public class Factory {        //通过传进来的类名,创建相应的商品    public static 
T createGood(Class c){ GoodInterface good=null; try { good = (GoodInterface) Class.forName(c.getName()).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("创建相应的商品对象异常"); e.printStackTrace(); } return (T)good; }

b、测试类

package designModel.factoryModel;import org.junit.Test;public class FactoryTest {    @Test    public void testFactory() {        Factory factory;        try {            factory = Factory.class.newInstance();            GoodInterface goodA = factory.createGood(GoodA.class);            goodA.printName();            goodA.printPrice();        } catch (InstantiationException | IllegalAccessException e) {            e.printStackTrace();        }    }}

 

2)、多工厂类模式

a、工厂类

package designModel.factoryModel;//创建一个抽象的工厂,其中定义了一个方法,用来创建商品public abstract class AbstractFactory {    //public abstract 
T createGood(Class c); //多工厂模式不需要在createGood方法中传递参数 public abstract GoodInterface createGood();}

实现GoodA的工厂,实现GoodB的工厂

package designModel.factoryModel;public class GoodAFactory extends AbstractFactory {    @Override    public GoodInterface createGood() {        return new GoodA();    }}package designModel.factoryModel;public class GoodBFactory extends AbstractFactory {    @Override    public GoodInterface createGood() {        return new GoodB();    }}

b、测试多工厂

@Test    public void testMoreAbstractFactory(){        AbstractFactory abstractFactory;        try {            abstractFactory = GoodAFactory.class.newInstance();            GoodInterface goodA = abstractFactory.createGood();            goodA.printName();            goodA.printPrice();        } catch (InstantiationException | IllegalAccessException e) {            e.printStackTrace();        }    }

 

转载于:https://www.cnblogs.com/keyidddd/p/5538436.html

你可能感兴趣的文章
tag标签
查看>>
TTS语言 录音功能
查看>>
MySQL 查询最大最小值优化
查看>>
软件工程的实践项目课程的自我目标
查看>>
Weak is not weak,Strong is not strong
查看>>
setsockopt 详解
查看>>
首次使用AWS服务器EC2
查看>>
POJ-1860-Currency Exchange
查看>>
[深度学习]受限玻尔兹曼机生成手写数字训练样本原理
查看>>
莫比乌斯反演
查看>>
Django Hello World
查看>>
分析rails日志,计算响应率
查看>>
PHP 提交checkbox表单时 判断复选框是否被选中
查看>>
day12-sqlalchemy 常用语法
查看>>
Interval GCD CH4302
查看>>
Vim + SpaceVim强大的Linux系统下的编辑器
查看>>
dxRibbonRadialMenu控件使用
查看>>
知识总结:测试用例
查看>>
Xutils请求服务器json数据与下载文件
查看>>
2018 Wannafly summer camp Day2--Utawarerumono
查看>>