美文网首页
工厂方法模式

工厂方法模式

作者: 1dot4 | 来源:发表于2019-02-12 14:32 被阅读1次

    定义

    定义一个用于创建对象的接口,让子类决定实例化哪个类。

    在任何需要生成复杂对象的地方,都可以使用工厂方法模式。反之,不复杂的用new即可。

    类图

    factory.png

    简单实现

    产品的抽象方法

    public abstract class Product {
        public abstract  void  method();
    }
    
    

    具体的产品A

    public class ConcreteProductA extends Product {
        @Override
        public void method() {
            System.out.println("ConcreteProductA");
        }
    }
    
    

    具体的产品B

    
    public class ConcreteProductB extends Product {
    
        @Override
        public void method() {
            System.out.println("ConcreteProductB");
        }
    }
    

    抽象工厂类

    
    public abstract class Factory {
    
        public abstract <T extends  Product> T createProduct(Class<T> tClass);
    }
    

    具体工厂类

    public class ConcreteFactory extends Factory {
        
        /**
         * 通过反射获取类的实例
         * @param tClass
         * @param <T>
         * @return
         */
        @Override
        public <T extends Product> T createProduct(Class<T> tClass) {
            Product p = null;
            try {
                p = (Product) Class.forName(tClass.getName()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return (T) p;
        }
    }
    

    Client中的实现:

    public class Client {
        public static  void main(String[] args){
            Factory factory=new ConcreteFactory();
            Product product=factory.createProduct(ConcreteProductA.class);
            product.method();
        }
    }
    

    Android源码中的实现

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
    }
    
    

    onCreate()方法实际上就是一个工厂方法,在上面代码中的Oncreate方法中构造一个View对象,并设置为当前界面的setContentView返回给framework处理。如果现在有一个其他的Activity,这时我们又在其onCreate方法通过setContentView方法设置不同的View,这不就是一个工厂方法模式?

    相关文章

      网友评论

          本文标题:工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/kmbheqtx.html