大话设计模式之_工厂模式

大话设计模式之_工厂模式

  • 工程方法(即简单工厂模式simpleFactory,或静态工厂方法 static factory method

  • 抽象工厂

什么是工厂呢?

工程模式是我们最常用的设计模式,在很多开源框架里头可以说工程模式是遍地开花呀,当然你如果你有兴趣写一个开源框架那么还得掌握:注解、反射机制,这个小笔笔会在后面跟大家分享吐槽。给大家附上:笔者曾经写的一个app的下拉刷新和加载更多的框架(由于涉及到公司的安全协议,这里给大家分享实现的思路和部分核心代码)

言归正传:工厂模式是我们最常用的实例化对象模式,通俗的说就是用工厂方法替代new操作一种设计模式

1.工厂方法

核心思想就只要记住一句话:有一个抽象的Factory类(可以是抽象类和接口)这个类不负责在具体的产品生产,而是制定一种规范,具体的生产由其子类去完成

ps:如果你理解上面这句话了,那么就说明你已经掌握了过程设计模式的精髓了,现在你已经成功了80%了,别担心,剩下的20%我给大家贴个demo就一目了然了


//1.定义接口

public interface People{

public void say();

}

//2.1接口的实现类

public void Chinese implements People{

public void say(){

system.out.printfln("中国话");

}

}

//2.2接口的实现类

public void Amercia implements People{

public void say(){

system.out.printfln("英语");

}

}

//3.工厂类,制定规范

public class People_Factory{

//方法的返回值,用到了多态

public static People create(int type){

if(type ==1){

return new Chinese();

}else if(type ==2){

return new Amercia();

}

}

}

//4.演示效果

public class TestFactory{

public static void main(String[]args){

People p = People_Factory.create(1);

p.say();

People p = People_Factory.create(2);

p.say();

}

}

2.抽象工厂

抽象工厂模式是工厂方法模式的升级版,它是用来创建一组相关或者相互依赖的对象。(又是很精辟的一句话,此处高能好好品味)

是不是有点难以理解?那就看下他们的区别对比下不同点,然后就知道抽象工厂是什么了。工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是对对个产品等级结构。

在编码中,通常一个产品结构为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或者抽象类的,而抽象工厂模式所提供的产品则是衍生自不同的接口或者抽象类。

在抽象工厂模式中,有一个产品族的概念(即位于不同产品等级结构中功能相关联的产品组成的家族)。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。

下面以生产汽车的例子讲述抽象工厂

2.0排量两车厢、2.3排量两车厢:属同一等级结构

2.0排量两车厢、2.0排量三车厢:属同一个产品族

ps:老规矩上代码,讲了一大通还是代码直观点


//1.1定义产品1接口

public IProduct1{

public void show();

}

//1.2定义产品2接口

public IProduct2{

public void show();

}

//2.1实现定义的接口

class Product1 implements IProduct1{

public void show(){

system.out.println("这是产品1");

}

}

//2.2实现定义的接口

class Product2 implements IProduct2{

public void show(){

system.out.println("这是产品2");

}

}

//3抽象工厂的接口

interface IFactory{

public IProduct1 createProduct1();

public IProduct2 createProduct2();

}

//4抽象工厂的实现类

class MyFactory implements IFactory{

public IProduct1 createProduct1(){

return new Product1();

}

public IProduct2 createProduct2(){

return new Product2();

}

}

//5如何使用

public class Client{

public static void main(String[]args){

IFactory factory = new MyFactory();

factory.createProduct1().show();

factory.createProduct1().show();

}

}

总结

如果工厂的产品全部属于同一个等级结构,则属于工厂方法模式;如果工厂的产品来自多个等级结构,则属于抽象工厂模式。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值