外观模式
例:定义一个动物接口,猫狗鱼实现该接口,并有购买方法,超市类,该类在构造时便创建了之前动物类的对象,并且可以调用动物类的方法。

Animal
public interface Animal {void buy();}
Cat
public class Cat implements Animal{public void buy(){System.out.println("你买了一只猫");}}
Dog
public class Dog implements Animal{public void buy() {System.out.println("你买了一条狗");}}
Fish
public class Fish implements Animal {public void buy(){System.out.println("你买了鱼老师");}}
Market
public class Market {private final Cat cat;private final Dog dog;private final Fish fish;public Market() {cat = new Cat();dog = new Dog();fish = new Fish();}public void buyCat() {cat.buy();}public void buyDog() {dog.buy();}public void buyFish() {fish.buy();}}
Test
public class Test {public static void main(String[] args) {Market m=new Market();m.buyCat();m.buyDog();m.buyFish();}}
享元模式
例:MyBook实现book接口,有属性name。Bookcase有获取书籍方法,如果书架中有相应书籍,则返回相应hashmap中相应书籍,如果没有相应书籍,则new一个MyBook对象,并将其加入到hashmap中
Book
public interface Book {void look();}
Bookcase
public class Bookcase {Map<String, MyBook> m = new HashMap<>();public Book getBook(String name) {if (!m.containsKey(name)) {m.put(name, new MyBook(name));}return (Book) m.get(name);}public int count(){return m.size();}}
MyBook
public class MyBook implements Book {private final String name;public MyBook(String name) {this.name = name;}@Overridepublic void look() {System.out.println("你正在看书:" + name);}}
Test
public class Test {public static void main(String[] args) {Bookcase bookcase = new Bookcase();bookcase.getBook("三国演义");bookcase.getBook("三国演义");bookcase.getBook("三国演义");bookcase.getBook("三国演义");bookcase.getBook("水浒传");bookcase.getBook("水浒传");bookcase.getBook("水浒传");bookcase.getBook("水浒传");System.out.println(bookcase.count());}}
代理模式
例:代理图片与真实图片实现图片接口,真实图片在创建时,会在内存中加载,代理图片在加载时,如果之前加载过,则不会消耗时间在内存中加载。Image
public interface Image {void display();}
ProxyImage
public class ProxyImage implements Image {private final String name;private RealImage realImage;public ProxyImage(String name) {this.name = name;}@Overridepublic void display() {if (realImage == null) {realImage = new RealImage(this.name);}realImage.display();}}
RealImage
public class RealImage implements Image {private final String name;public RealImage(String name) {this.name = name;load();}private void load() {System.out.println("加载图像,消耗两秒");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}@Overridepublic void display() {System.out.println("显示图片");}}
Test
public class Test {public static void main(String[] args) {Image image1 = new ProxyImage("图片1");image1.display();image1.display();image1.display();image1.display();}}
文章转载自Hello 帅帅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




