博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
阅读量:7073 次
发布时间:2019-06-28

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

本文出自

本系列持续更新,敬请关注。

1 静态工厂

静态工厂介绍:

静态工厂模式可以实现接口封装隔离的原则。在客户端只知接口而不知实现的时候可以使用静态工厂模式。

角色:

Product:客户端需要使用的接口。 ConcreteProduct:Product的具体实现。Factory:拥有静态方法的工厂类,返回ConcreteProduct实例。Client:只知到Product。但是并不知道具体实现。

UML:

这里写图片描述

code:

package 设计模式.staticFactary;/* *2016年8月26日    上午10:15:22 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface Product {    public void operation();}
package 设计模式.staticFactary;/* *2016年8月26日    上午10:15:00 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteProduct implements Product{    @Override    public void operation() {        System.out.println("我是具体产品中的实现方法");    }}
package 设计模式.staticFactary;/* *2016年8月26日    上午10:47:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Factory {    public static Product getProduct(){        return new ConcreteProduct();    }}
package 设计模式.staticFactary;/* *2016年8月26日    上午10:48:05 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Client {    public static void main(String[] args) {        Product product=Factory.getProduct();        product.operation();    }}

2 AbstractFactory(抽象工厂)

AbstractFactory介绍:

AbstractFactory是为一系列相关的或者相互依赖的类创建接口,客户端不用关注他们的实现。相当如一个AbstractFactory的实现创建一个产品族。

AbstractFactory角色:

abstractProduct:抽象产品类。ConcreteProduct:具体的产品实现。abstractFactory:抽象工厂。ConcreteFactory:具体的工厂实现。

UML:

这里写图片描述

场景:选用不同的方案来装机,主要是让cpu和主板配套。

code:

abstractProduct

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface CpuAPI {    public  void calculate();}

abstractProduct

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface MainBoardAPI {    void install();}

ConcreteProduct

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class IntellCpu implements CpuAPI{    Integer cpuPins;    public IntellCpu(Integer pins) {        cpuPins=pins;    }    @Override    public void calculate() {        System.out.println("Intell cpu 正在计算....."+"pins:"+cpuPins);    }}

ConcreteProduct

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class AMDCpu implements CpuAPI{    Integer cpuPins;    public AMDCpu(Integer pins) {        cpuPins=pins;    }    @Override    public void calculate() {        System.out.println("AMD cpu 正在计算....."+"pins:"+cpuPins);    }}
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/ConcreteProduct//技嘉主板public class GigaMainboard implements MainBoardAPI{    //插入cpu的接口pin数    Integer pins ;    public GigaMainboard(Integer pins) {        this.pins=pins;    }        @Override    public void install() {        System.out.println("技嘉主板正在安装.....pin数:"+pins);    }    }

ConcreteProduct

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com*///微星主板public class MSIMainboard implements MainBoardAPI{    //插入cpu的接口pin数    Integer pins ;    public MSIMainboard(Integer pins) {        this.pins=pins;    }        @Override    public void install() {        System.out.println("微星主板正在安装.....pin数:"+pins);    }    }

AbstractFactory

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:29:07 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface AbstractFactory {    CpuAPI createCPU();    MainBoardAPI createMainBoardAPI();}

ConcreteFactory

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteFactoryA implements AbstractFactory{    @Override    //intell cpu    public CpuAPI createCPU() {        return new IntellCpu(1156);    }    //技嘉主板    @Override    public MainBoardAPI createMainBoardAPI() {        return new GigaMainboard(1156);    }    }

ConcreteFactory

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteFactoryB implements AbstractFactory{    @Override    //AMD cpu    public CpuAPI createCPU() {        return new AMDCpu(939);    }    //微星主板    @Override    public MainBoardAPI createMainBoardAPI() {        return new MSIMainboard(939);    }    }

Client

package 设计模式.abstractFactory;/* *2016年9月2日 上午10:39:15 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Engineer {    AbstractFactory schemal;    public Engineer(AbstractFactory schemal) {        this.schemal = schemal;    }    public void setSchemal(AbstractFactory schemal) {        this.schemal = schemal;    }    public void makeAndUseComputer(){        CpuAPI cpu=schemal.createCPU();        MainBoardAPI mainBoard=schemal.createMainBoardAPI();        cpu.calculate();        mainBoard.install();    }}
package 设计模式.abstractFactory;import static org.junit.Assert.*;import java.nio.channels.NonWritableChannelException;import javax.swing.border.AbstractBorder;import org.junit.Test;/* *2016年9月2日 上午10:35:51 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Client {    @Test    public void test() {        System.out.println("装机方案A");        //装机模式1        AbstractFactory schemalA=new ConcreteFactoryA();        Engineer engineer=new Engineer(schemalA);        engineer.makeAndUseComputer();                System.out.println("装机方案B");        //装机模式2        AbstractFactory schemalB=new ConcreteFactoryB();        engineer.setSchemal(schemalB);        engineer.makeAndUseComputer();    }}

output:

装机方案AIntell cpu 正在计算.....pins:1156技嘉主板正在安装.....pin数:1156装机方案BAMD cpu 正在计算.....pins:939微星主板正在安装.....pin数:939

本文出自

欢迎与广大coder交流技术

QQ:1228935432
WX:WX1228935432
这里写图片描述

转载于:https://www.cnblogs.com/pin-wang/p/5839984.html

你可能感兴趣的文章
哪些数据科学技能是雇主所需要的
查看>>
mailx邮件客户端发送邮件
查看>>
做为程序员应该要拥有属于自己的独立博客
查看>>
facl 文件系统访问列表 (笔记)
查看>>
GIT使用技巧总结
查看>>
Symantec Backup Exec 2014 备份Exchange 2013之五备份DAG
查看>>
ME60限速模板顺序
查看>>
《阿里巴巴Android开发手册》v1.0.1更新,优化部分内容和示例代码
查看>>
Spark学习记录(三)核心API模块介绍
查看>>
深度优先搜索(Depth First Search)
查看>>
如何解决常见的Joomla安装问题
查看>>
一分钟学会《模板方法模式》
查看>>
openstack 和hadoop的区别
查看>>
python 笔记 之 列表生成式和生成器
查看>>
OSS支持IPV6/IPV4双栈访问域名
查看>>
哪有什么互联网寒冬?只是你穿的少而已!
查看>>
牛客网刷题
查看>>
罗辑思维在全链路压测方面的实践和工作笔记
查看>>
python爬虫日志(3)-爬取异步加载网页
查看>>
关于IRF640PBF
查看>>