美文网首页
二.工厂方法模式

二.工厂方法模式

作者: Seven_DQ | 来源:发表于2018-08-28 17:14 被阅读0次

    定义

    定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行
    意思就是,定义一个工厂接口,接口中以一个生产对象的接口,让工厂子类实现这个接口来生产对象,来创建对象

    模型

    模型图

    代码实例

    1. 工厂接口
    public interface CardFactory {
    
        /**
         * 创建对象
         * @param cardType
         * @return
         * @throws Exception
         */
        Card createCard(CardType cardType) throws Exception;
    }
    
    1. 实现工厂,实现方法
    public class CardFactoryImpl implements CardFactory {
    
        private static Map<CardType,Card> map = new HashMap<CardType, Card>();
    
        /**
         * 根据type创建对于的对象
         * @param cardType
         * @return
         * @throws Exception
         */
        public Card createCard(CardType cardType) throws Exception {
            if (!map.containsKey(cardType)){
                throw new Exception("无此类型的card");
            }
            return map.get(cardType);
        }
    
        static {
            map.put(CardType.GREEN_CARD, new GreenCard());
            map.put(CardType.RED_CARD, new RedCard());
        }
    }
    

    实现createCard方法来根据不同的type创建对应的对象,这里我是用集合来存放对象,目的是减少多个if判断

    1. 产品类
    public interface Card {
    
        public void color();
    }
    
    public class GreenCard implements Card {
        public void color() {
            System.out.println("green card");
        }
    }
    
    public class RedCard implements Card {
        public void color() {
            System.out.println("red card");
        }
    }
    

    用途

    1. 良好的封装性,调用者只需知道产品的type,并需要之道创建的对象的过程
    2. 良好的扩展性,出现第三种卡片,我们只需要创建一个新的卡片类和在工厂中的map中添加,而对于调用者不需要更改任何代码,只需要使用新的type就可以获得新的对象

    源代码

    factory-method

    相关文章

      网友评论

          本文标题:二.工厂方法模式

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