设计模式---抽象工厂

简单工厂,把外面满天飞的new搞进来了。不局限于内部生成对象一定要new。经典的Class.forname("").newInstance();由类名生成类对象,再实例化实例对象。

抽象工厂,讲究的是类型的产品对象,不是杂乱无章的产品对象。产品有类,接口。工厂有类,接口。工厂一对多的产品组合。

如果新来一个产品类别。那得搞多一个产品接口,类。原有工厂如果也跟他拉上关系,也得改,赋予原有工厂修改。

如果新来一个工厂,那就比较简单,实现工厂接口的类建一个。供外部调用。

抽象工厂,jdk经典案例

jdbc

try {

加载第三方包,阔以是mysql、oracle、sqlserver,生成类对象,意图加载关联类文件
            java.lang.Class.forName("mysql.driver.XXX");

建立连接,连接connection就一接口,连接也是各个第三方包实现
            java.sql.Connection conn = java.sql.DriverManager.getConnection("url address");

声明,就一接口,mysql自己包定义实现。类似工厂,为下方生成各类产品。mysql就一个类型的工厂。
            java.sql.Statement s = conn.createStatement();

resultset结果集,就一接口,这个可以比对产品,至于产品模型就这玩意,里面产品是个啥,mysql包里面定义
            java.sql.ResultSet resultSet = s.executeQuery("");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

 

 

抽象工厂demo:
    interface Mouse{
        public void doMouse();
    }
    
    interface Keybord{
        public void doKeybord();
    }
    
    class MakeMouse1 implements Mouse{
        public void doMouse(){
            System.out.println("MakeMouse1");
        }
    }
    
    class MakeMouse2 implements Mouse{
        public void doMouse(){
            System.out.println("MakeMouse2");
        }
    }
    
    class MakeKeybord1 implements Keybord{
        public void doKeybord(){
            System.out.println("MakeKeybord1");
        }
    }
    
    class MakeKeybord2 implements Keybord{
        public void doKeybord(){
            System.out.println("MakeKeybord2");
        }
    }
    
    interface ProduceFactory{
        public void doMouse();
        public void doKeybord();
    }
    
    class DaierFactory implements ProduceFactory{
        public void doMouse(){
            MakeMouse1 mouse1 = new MakeMouse1();
            mouse1.doMouse();
        }
        public void doKeybord(){
            MakeKeybord1 keybord1 = new MakeKeybord1();
            keybord1.doKeybord();
        }
    }
        
    class SonyFactory implements ProduceFactory{
        public void doMouse(){
            MakeMouse1 mouse2 = new MakeMouse1();
            mouse2.doMouse();
        }
        public void doKeybord(){
            MakeKeybord2 keybord2 = new MakeKeybord2();
            keybord2.doKeybord();
        }
    }

    public static void main(String[] args) {
        ProduceFactory sonyFactory = new test().new SonyFactory();
        sonyFactory.doKeybord();
        sonyFactory.doMouse();
        
        DaierFactory daierFactory = new test().new DaierFactory();
        daierFactory.doKeybord();
        daierFactory.doMouse();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值