黑马程序员技术交流社区

标题: 23种设计模式--抽象工厂模式 [打印本页]

作者: 小麦芽    时间: 2017-4-1 10:23
标题: 23种设计模式--抽象工厂模式
这个抽象工厂模式相对较为复杂,我尽量写的简单点儿
这个模式一般用在生产不同种族的产品


//-------------抽象类-----------------------------------
public abstract class AmericaCar {

        public String color = "黑色";
        //不可以定制颜色,只有价格
        public abstract void price();
       
        public void seatNum(){
                System.out.println("4个座位数");
        }
}


public abstract class ChinaCar {
       
        //价格
        public abstract void price();
        //可以定制颜色
        public abstract void color();
       
        public  void wheelNum(){
                System.out.println("6个轮胎");
        }
}

//-------------------不同级别的子类----------------------------------
//A级别轿车美国
public class ALevelAmerica extends AmericaCar {

        @Override
        public void price() {
                System.out.println("A级别美国制造-5百万");
        }
}
//B级别轿车美国
public class BLevelAmerica extends AmericaCar {

        @Override
        public void price() {
                System.out.println("B级别美国制造--1百万");
        }
}


//A级别轿车中国
public class ALevelChina extends ChinaCar {

        @Override
        public void price() {
                System.out.println("A级别中国制造--1千万");
        }

        @Override
        public void color() {
                System.out.println("红色");
        }
}

//B级别轿车中国
public class BLevelChina extends ChinaCar {

        @Override
        public void price() {
                System.out.println("B级别中国制造--7百万");
        }

        @Override
        public void color() {
                System.err.println("灰色");
        }
}

//--------工厂接口----只为多态--------------------------------
public interface CarFactory {

          AmericaCar createCarAmerica();
          
          ChinaCar  createCarChina();
}

//----------------------不同级别的工厂类------------------------------
//A级别轿车工厂
public class ALevelFactory implements CarFactory {

        @Override
        public AmericaCar createCarAmerica() {
               
                return new ALevelAmerica();
        }

        @Override
        public ChinaCar createCarChina() {
               
                return new ALevelChina();
        }
}

//B级别轿车工厂
public class BLevelFactory implements CarFactory {

        @Override
        public AmericaCar createCarAmerica() {
               
                return new BLevelAmerica();
        }

        @Override
        public ChinaCar createCarChina() {
               
                return new BLevelChina();
        }
}

//----------------测试类------------------------
public class FactoryTest {

        public static void main(String[] args) {
               
                //A级别工厂制造的汽车
                CarFactory cFactory = new ALevelFactory();
                AmericaCar aa = cFactory.createCarAmerica();
                aa.price();
                ChinaCar ac = cFactory.createCarChina();
                ac.price();
               
                //B工厂制造的汽车
                BLevelFactory bFactory = new BLevelFactory();
                AmericaCar ba = bFactory.createCarAmerica();
                ChinaCar bc = bFactory.createCarChina();
                ba.price();
                bc.price();
        }
}

“抽象工厂模式”好像是只为解决种族的划分,如果有不同见解,可以一起讨论
作者: Hp_Yx    时间: 2017-4-1 10:51
顶贴。。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2