栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java设计模式|工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java设计模式|工厂模式

package factory;

public class FactoryMethod {

    public static void main(String[] args) {
        Application application = new Application();
        ProductA productA=application.getObject();
        productA.method1();
    }

}

class ProductA{
    public void method1(){
        System.out.println("ProductA.method1 executed");
    }
}

class Application{
    private ProductA createProduct(){
        return new ProductA();
    }

    ProductA getObject(){
        ProductA productA = createProduct();
        return productA;
    }
}
package factory;

public class FactoryMethod {

    public static void main(String[] args) {
        Application application = new ConcreateProduct1();
        Product  product =application.getObject();
        product.method1();
    }

}

interface Product{
    public void method1();
}


class ProductA implements Product{

    @Override
    public void method1(){
        System.out.println("ProductA.method1 executed");
    }
}

class Product1 implements Product{

    @Override
    public void method1(){
        System.out.println("Product1.method1 executed");
    }
}

class SimpleFactory{
    public static Product createProduct(String type){
        if(type.equals("0")){
            return new ProductA();
        }else if(type.equals("1")){
            return new Product1();
        }else{
            return null;
        }
    }
}

abstract class Application{
    abstract   Product createProduct( ) ;

    Product getObject(){
        Product product = createProduct();
        return product;
    }
}

class ConcreateProductA extends  Application{

    @Override
    Product createProduct( ) {
        return new ProductA();
    }
}

class ConcreateProduct1 extends  Application{

    @Override
    Product createProduct( ) {
        return new Product1();
    }
}

应用场景

1.当你不知道该使用对象的确切类型的时候

2.当你希望为库或框架提供扩展其内部组件的方法时

主要优点:

1.将具体产品和创建者解耦

2.符合单一职责原则

3.符合开闭原则

源码中的应用:

Java api

//静态工厂方法

Calendar.getInstance()

java.text.NumberFormat.getInstance()

java.util.ResourceBundle.getBundle()

//工厂方法

java.net.URLStreamHandlerFactory

javax.xml.bind.JAXBContext.createMarshaller


抽象工厂模式
package factory;

public class AbstractFactoryTest {
    public static void main(String[] args) {
        IDatabasedUtils iDatabasedUtils = new MyOraclebaseUtils();
        IConnection connection=iDatabasedUtils.getConnection();
        connection.connect();

       ICommand command =iDatabasedUtils.getCommand();
       command.command();
    }
}

// 变化:mysql oracle
//     connection , command,


interface IConnection{
    void connect();
}

class MySqlConnection implements IConnection{

    @Override
    public void connect() {
        System.out.println("mysql connected.");
    }
}

class MyOracleConnection implements  IConnection{
    @Override
    public void connect() {
        System.out.println("myoracle connected.");
    }
}

interface ICommand{
    void command();
}


class MysqlCommand implements ICommand{

    @Override
    public void command() {
        System.out.println("mysql command.");
    }
}

class MyOracleCommand implements ICommand{
    @Override
    public void command() {
        System.out.println("myOracle command.");
    }
}

interface IDatabasedUtils{
    IConnection getConnection();
    ICommand getCommand();
}

class MysqlDatabaseUtils implements IDatabasedUtils{

    @Override
    public IConnection getConnection() {
        return new MySqlConnection();
    }

    @Override
    public ICommand getCommand() {
        return new MysqlCommand();
    }
}

class MyOraclebaseUtils implements  IDatabasedUtils
{

    @Override
    public IConnection getConnection() {
        return new MyOracleConnection();
    }

    @Override
    public ICommand getCommand() {
        return new MyOracleCommand();
    }
}



模式定义:

提供一个创建一系列相关或互相依赖对象的接口,而无需制定他们具体的类

优点:

1.可以确信你从工厂得到的产品彼此是兼容的

2.可以避免具体产品和客户端代码之间的紧密耦合

3.符合单一职责原则

4.符合开闭原则

JDK源码中的应用

1.java.sql.connection

2.java.sql.Driver

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号