设计模式-创建型模式-抽象工厂

    技术2022-05-20  51

    创建型模式:抽象了实例化过程,它们帮助一个系统如何独立于如何创建、组合和表示它的哪些对象。一个创建型模式使用了继承改变实例化的类,而一个对象的实例化将委托给别一个对象来现实。

    Abstract Factory模式:

    1、一个系统要独立于它的产品的创建、组合和表示时。

    2、一个系统要由多个产品系例中的一个配制时。

    3、强调一系例产品对象的相关设计以便进行联合使用。

    4、当你提供一个产品库时,你只想显示他的接口不想显示他的实现。

     

    代码:

    package abstractFactory;/* * AbstractFactory */public abstract  class Room  {    public abstract Wall makeWall();    public abstract Door makeDoor();}package abstractFactory;/* * The Abstract Class of Door */public abstract class Door  {    //private Door door;    public abstract String getName() ;}

     

    package abstractFactory;/* * The Abstract Class of Wall */public abstract class Wall  {    //private Wall wall;    public abstract String getName();}

     package abstractFactory;/* * A concrete Room - BedRoom */public class BedRoom  extends Room {    public BedRoom() {        System.out.println("Initiated a bedroom !");    }    public Door makeDoor() {        return new BedRoomDoor();    }    public Wall makeWall() {        return new BedRoomWall();    }}

     

    package abstractFactory;/* * A concrete Door for Bed Room */public class BedRoomDoor extends Door {    private String doorName;    public BedRoomDoor() {        doorName = "BedRoomDoor";    }    public String getName() {        return doorName;    }}

     

    package abstractFactory;/* * A concrete Wall for Living Room */public class BedRoomWall extends Wall {    private String wallName;    public BedRoomWall() {        wallName = "BedRoomWall";    }    public String getName() {        return wallName;    }}

     

    package abstractFactory;/* * A concrete Room - LivingRoom */public class LivingRoom  extends Room {    public LivingRoom() {        System.out.println("Initiated a living room !");    }    public Door makeDoor() {        return new LivingRoomDoor();    }    public Wall makeWall() {        return new LivingRoomWall();    }}

    package abstractFactory;/* * A concrete Door for Living Room */public class LivingRoomDoor extends Door {    private String doorName;    public LivingRoomDoor() {        doorName = "LivingRoomDoor";    }    public String getName() {        return doorName;    }}

     

    package abstractFactory;/* * A concrete Wall for Living Room */public class LivingRoomWall  extends Wall {    private String wallName;    public LivingRoomWall() {        wallName = "LivingRoomWall";    }    public String getName() {        return wallName;    }}

     

    public class RoomMaker  {    public Room CreateRoom(String roomType) {        if(roomType.equals("LivingRoom")) {            return new LivingRoom();        } else if(roomType.equals("BedRoom")) {            return new BedRoom();        } else {            return new LivingRoom();        }    }

        public static void main(String[] args) {        RoomMaker myMaker = new RoomMaker();        //-----  Create Living Room        Room myLivingRoom = myMaker.CreateRoom("LivingRoom");        //-----  Create a door in living room        Door livingDoor = myLivingRoom.makeDoor();        System.out.println("Living room door name is:" + livingDoor.getName() );        //-----  Create a wall in living room        Wall livingWall = myLivingRoom.makeWall();        System.out.println("Living room wall name is:" + livingWall.getName() );

            //-----  Create Bed Room        Room myBedRoom = myMaker.CreateRoom("BedRoom");        //-----  Create a door in bedroom        Door BedDoor = myBedRoom.makeDoor();        System.out.println("Bed room door name is:" + BedDoor.getName() );        //-----  Create a wall in bedroom        Wall BedWall = myBedRoom.makeWall();        System.out.println("Bed room wall name is:" + BedWall.getName() );

        }}

     

     


    最新回复(0)