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

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

1、符合单一职责原则   需求端相互隔离

2、符合开闭原则  修改关闭,新增开放

简单工厂

package com.fen.dou.sjms.factory;public class SimpleFactory {    public static void main(String[] args) {        Product product = SimpleFactory.createProdcut("1");        product.method1();    }    public static Product createProdcut(String type) {        if (type.equals( "0" )) {            return new ProductA();        } else if (type.equals( "1" )) {            return new ProductA1();        } else {            return null;        }    }}

 

 工厂方法

应用场景

1.当你不知道改使用对象的确切类型的时候
2.当你希望为库或框架提供扩展其内部组件的方法时
主要优点:
1.将具体产品和创建者解耦
2.符合单一职责原则
3.符合开闭原则

 

package com.fen.dou.sjms.factory;public class FactoryMehtod {    public static void main(String[] args) {        Application application =  new ConcreteProductA();        application.getObject().method1();        Application application1 =  new ConcreteProductA1();        application.getObject().method1();    }}interface Product {    public void method1();}// 具体实现class ProductA implements Product {        public void method1() {            System.out.println( "ProductA.methodA executed. " );        }}// 工厂方法具体实现类class ConcreteProductA extends Application {    @Override    Product createProduct() {        return new ProductA();    }}class ProductA1 implements Product {    public void method1() {        System.out.println( "ProductA1.methodA1 executed. " );    }}class ConcreteProductA1 extends Application {    @Override    Product createProduct() {        return new ProductA1();    }}abstract class Application {    abstract Product createProduct();    Product getObject() {        Product product=createProduct();        return product;    }}

 

 抽象工厂

 应用场景:

程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的
具体类时,
可以使用抽象工厂
优点:
1.可以确信你从工厂得到的产品彼此是兼容的。
2.可以避免具体产品和客户端代码之间的紧密耦合。
3.符合单一职责原则
4.符合开闭原则
package com.fen.dou.sjms.factory;public class AbstractFactory {    public static void main(String[] args) {         IDatabaseUtils iDatabaseUtils=new OracleDataBaseUtils();         IConnection connection=iDatabaseUtils.getConnection();         connection.connect();         ICommand command=iDatabaseUtils.getCommand();         command.command();    }}interface IConnection{    void connect();}interface ICommand{    void command();}interface IDatabaseUtils{    IConnection getConnection();    ICommand getCommand();}class MysqlConnection implements IConnection{    @Override    public void connect() {        System.out.println("mysql connected.");    }}class OracleConnection implements IConnection{    @Override    public void connect() {        System.out.println("oracle connected.");    }}class MysqlCommand implements ICommand{    @Override    public void command() {        System.out.println(" mysql command. ");    }}class OracleCommand implements ICommand{    @Override    public void command() {        System.out.println("oracle command.");    }}class MysqlDataBaseUtils implements IDatabaseUtils{    @Override    public IConnection getConnection() {        return new MysqlConnection();    }    @Override    public ICommand getCommand() {        return new MysqlCommand();    }}class OracleDataBaseUtils implements IDatabaseUtils{    @Override    public IConnection getConnection() {        return new OracleConnection();    }    @Override    public ICommand getCommand() {        return new OracleCommand();    }}

 

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

你可能感兴趣的文章