博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式---简单工厂模式(学习笔记)
阅读量:6915 次
发布时间:2019-06-27

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

简单工厂事实上不是一个设计模式,比較像一种编程习惯!

首先看一下代码,从代码中理解这个编程习惯。

举个做披萨的样例:

Pizza类代码:

public interface Pizza {    void prepare();    void box();    void bake();    void cut();}
详细的披萨CheesePizza:

public class CheesePizza implements Pizza {    private String tag="CheesePizza:";    @Override    public void prepare() {        System.out.println(tag+"pripare()");    }    @Override    public void box() {        System.out.println(tag+"box()");    }    @Override    public void bake() {        System.out.println(tag+"bake()");    }    @Override    public void cut() {        System.out.println(tag+"cut()");    }}
详细的披萨ClamPizza:

public class ClamPizza implements Pizza {    private String tag="ClamPizza:";    @Override    public void prepare() {        System.out.println(tag+"pripare()");    }    @Override    public void box() {        System.out.println(tag+"box()");    }    @Override    public void bake() {        System.out.println(tag+"bake()");    }    @Override    public void cut() {        System.out.println(tag+"cut()");    }}
简单工厂累:
public class SimplePizzaFactory {    public Pizza createPizza(String tpye){        Pizza pizza = null;        if (tpye.equals("cheese")){        pizza=new CheesePizza();        }else if (tpye.equals("clam")){         pizza=new ClamPizza();        }        return pizza;    }}
披萨订单类PizzaStore:

public  class PizzaStore {    SimplePizzaFactory simplePizzaFactory;    protected PizzaStore(SimplePizzaFactory simplePizzaFactory) {        this.simplePizzaFactory = simplePizzaFactory;    }    protected final Pizza orderPizza(String type){//        Pizza pizza=pizzafactory.createP(type);        Pizza pizza=simplePizzaFactory.createPizza(type);        pizza.prepare();        pizza.bake();        pizza.cut();        pizza.box();        return pizza;    }}
測试代码:
public static void main(String[] args){    PizzaStore chijiaPizzaStore=new PizzaStore(new SimplePizzaFactory());     chijiaPizzaStore.orderPizza("cheese");     chijiaPizzaStore.orderPizza("clam");    }
打印结果:
CheesePizza:pripare()CheesePizza:bake()CheesePizza:cut()CheesePizza:box()ClamPizza:pripare()ClamPizza:bake()ClamPizza:cut()ClamPizza:box()
从代码中能够看出,创建对象之前,事实上是把对象的共同操作方法抽象出来,为以后对象的扩展做准备,这个接口能够是接口类或者是抽象类,由详细的子类实现或者继承。可是对于简单工厂里的方法,仅仅确定创建哪个详细的对象。

来看一个比較通用的工厂模式框架代码:

抽象产品类:

public abstract class Product {    public void method1(){    };    public abstract  void method2();}
详细产品类

public class ConcreteProduct1 implements Product{        @Override        public void method2() {                    }    }public class ConcreteProduct2 implements Product{        @Override        public void method2() {                    }    }
抽象工厂类:

public abstract  class Creator {    /**     *     * @param c     * @param 
參数类型能够自行设置,通常为String,emum,Class等,也能够为空 * @return */ public abstract
T createProducts(Class
c);}
详细工厂类:

public class ConcreteFactory extends Creator {               @Override        public 
T createProducts(Class
c) { Product product=null; try { product= (Product) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (T) product; } }
详细代码測试类:

Creator creator=new ConcreteFactory();  Product product=  creator.createProducts(COncreteProduct2.class);

假设一个模块仅须要一个工厂类,没有必要把它生产出来,使用静态方法就能够啦,把上述的抽象工厂类直接替换为详细工厂类,并使用静态方法就能够,这样就变为简单工厂模式,或者是静态工厂模式

写的不好,希望多提意见,共同进步学习!谢谢

转载地址:http://npxcl.baihongyu.com/

你可能感兴趣的文章
SQL Server2014 SP2新增的数据库克隆功能
查看>>
USACO 状压DP练习[3]
查看>>
Gdb远程调试Linux内核遇到的Bug
查看>>
bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]
查看>>
调整Redmine的用户显示格式
查看>>
Objc执行时读取和写入plist文件遇到的问题
查看>>
Hadoop生态圈-Kafka的完全分布式部署
查看>>
Lucene全文检索
查看>>
who they are
查看>>
cellet端点的问题
查看>>
HDOJ-2602 Bone Collector
查看>>
10 个对初学者有用的 GIT 教程
查看>>
C 学习笔记
查看>>
WPF回忆收藏
查看>>
引用Interop.SQLDMO.dll后的注意事项。
查看>>
ubuntu 配置 web服务器
查看>>
[转载]执行中的专注
查看>>
几本图形学的书
查看>>
Data De-duplication
查看>>
虚方法的调用是怎么实现的(单继承VS多继承)
查看>>