Java教程 第89页

Java 桥接模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 桥接模式

Java设计模式 – 桥接模式 桥接模式将定义与其实现分离。它是一种结构模式。 此模式涉及充当桥接的接口。桥使得具体类与接口实现者类无关。 这两种类型的类可以改变而不影响对方。 例子 interface Printer { public void print(int radius, int x, int y); } class ColorPrinter implements Printer { @Override public void print(int radius, int x, int y) { System.out.println("Color: " + radius +", x: " +x+", "+ y +"]"); } } class BlackPrinter implements Printer { @Override public void print(int radius, int x, int y) { System.out.println("Black: " + radius +", x: " +x+", "+ y +"]"); } } abstract class Shape { protected Printer print; protected Shape(Printer p){ this.print = p; } public abstract void draw(); } class Circle extends Shape { private int x, y, radius; public Circle(int x, int y, int radius, Printer draw) { super(draw); this.x = x; this.y =...

Java 过滤器/标准模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 过滤器/标准模式

Java设计模式 – 过滤器/标准模式 过滤器模式使用不同的条件过滤对象。 这些标准可以通过逻辑操作链接在一起。 过滤器模式是一种结构型模式。 例子 import java.util.List; import java.util.ArrayList; class Employee { private String name; private String gender; private String retireStatus; public Employee(String name, String gender, String r) { this.name = name; this.gender = gender; this.retireStatus = r; } public String getName() { return name; } public String getGender() { return gender; } public String getRetireStatus() { return retireStatus; } @Override public String toString() { return "Employee [name=" + name + ", gender=" + gender + ", retireStatus=" + retireStatus + "]"; } } interface Criteria { public List<Employee> meetCriteria(List<Employee> persons); } class CriteriaMale implements Criteria { @Override public List<Employee> meetCriteria(List<Employee> persons) { List<Employee> malePersons = new ArrayList<Employee>(); for (Employee person : persons) { if (person.getGender().equalsIgnoreCase("MALE")) { malePersons.add(person);...

Java 组合模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 组合模式

Java设计模式 – 组合模式 组合模式是结构型模式,因为它创建了一组对象的树结构。 组合模式将一组对象视为单个对象。 组合模式使用一个类来表示树结构。 在组合模式中,我们创建一个包含自己对象的类的组。 例子 以下代码使用Employee类来演示组合模式。 import java.util.ArrayList; import java.util.List; class Employee { private String name; private String title; private List<Employee> subordinates; public Employee(String name,String title) { this.name = name; this.title = title; subordinates = new ArrayList<Employee>(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return "Employee :[ Name : "+ name +", dept : "+ title +subordinates +" ]"; } } public class Main { public static void main(String[] args) { Employee CEO = new Employee("John","CEO"); Employee headSales = new Employee("Rob","Sales"); Employee headMarketing = new Employee("Mike","Marketing"); Employee programmer1 = new Employee("Lili","Programmer"); Employee programmer2 = new Employee("Bob","Programmer"); Employee tester1 = new...

Java 装饰模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 装饰模式

 Java设计模式 – 装饰模式 装饰模式在不链接其结构的情况下向现有对象添加新功能。 它是一种结构型模式,因为它充当现有类的包装器。 装饰模式创建一个装饰器类来包装原始类并提供其他功能。 例子 interface Printer { void print(); } class PaperPrinter implements Printer { @Override public void print() { System.out.println("Paper Printer"); } } class PlasticPrinter implements Printer { @Override public void print() { System.out.println("Plastic Printer"); } } abstract class PrinterDecorator implements Printer { protected Printer decoratedPrinter; public PrinterDecorator(Printer d){ this.decoratedPrinter = d; } public void print(){ decoratedPrinter.print(); } } class Printer3D extends PrinterDecorator { public Printer3D(Printer decoratedShape) { super(decoratedShape); } @Override public void print() { System.out.println("3D."); decoratedPrinter.print(); } } public class Main { public static void main(String[] args) { Printer plasticPrinter = new PlasticPrinter(); Printer plastic3DPrinter = new Printer3D(new PlasticPrinter()); Printer paper3DPrinter = new Printer3D(new PaperPrinter()); plasticPrinter.print(); plastic3DPrinter.print(); paper3DPrinter.print(); } } 上面的代码生成以下结果。

Java 外观模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 外观模式

 Java设计模式 – 外观模式 外观模式隐藏了系统的复杂性。 它为客户端提供了一个简单的接口,客户端使用接口与系统交互。 外观模式是结构型模式。 例子 class ShapeFacade { interface Shape { void draw(); } class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } } class Square implements Shape { @Override public void draw() { System.out.println("Square::draw()"); } } class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } } private Shape circle = new Circle(); private Shape rectangle = new Rectangle(); private Shape square = new Square(); public ShapeFacade() { } public void drawCircle() { circle.draw(); } public void drawRectangle() { rectangle.draw(); } public void drawSquare() { square.draw(); } } public class Main { public static void main(String[] args) { ShapeFacade shapeFacade = new ShapeFacade(); shapeFacade.drawCircle(); shapeFacade.drawRectangle(); shapeFacade.drawSquare(); } } 上面的代码生成以下结果。

Java 代理模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 代理模式

Java设计模式 – 代理模式 在代理模式中,一个类代表另一个类的功能。 代理模式是一种结构模式。 在代理模式中,我们创建具有原始接口的对象,以将其功能暴露给外部世界。 例子 interface Printer { void print(); } class ConsolePrinter implements Printer { private String fileName; public ConsolePrinter(String fileName){ this.fileName = fileName; } @Override public void print() { System.out.println("Displaying " + fileName); } } class ProxyPrinter implements Printer{ private ConsolePrinter consolePrinter; private String fileName; public ProxyPrinter(String fileName){ this.fileName = fileName; } @Override public void print() { if(consolePrinter == null){ consolePrinter = new ConsolePrinter(fileName); } consolePrinter.print(); } } public class Main { public static void main(String[] args) { Printer image = new ProxyPrinter("test"); image.print(); } } 上面的代码生成以下结果。

Java 责任链模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 责任链模式

Java设计模式 -责任链模式 责任链模式为请求创建一个接收者对象列表。 这种模式是行为模式。 当使用责任链模式时,通常每个接收器包含对另一个接收器的引用。 如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,等等。 例子 abstract class Logger { protected Logger nextLogger; public void setNextLogger(Logger nextLogger){ this.nextLogger = nextLogger; } public void logMessage(String message){ log(message); if(nextLogger !=null){ nextLogger.logMessage(message); } } abstract protected void log(String message); } class ConsoleLogger extends Logger { public ConsoleLogger(){ } @Override protected void log(String message) { System.out.println("Console::Logger: " + message); } } class EMailLogger extends Logger { public EMailLogger(){ } @Override protected void log(String message) { System.out.println("EMail::Logger: " + message); } } class FileLogger extends Logger { public FileLogger(){ } @Override protected void log(String message) { System.out.println("File::Logger: " + message); } } public class Main { private static Logger getChainOfLoggers(){ Logger emailLogger = new EMailLogger(); Logger fileLogger = new FileLogger(); Logger consoleLogger = new...

Java 命令模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 命令模式

 Java设计模式 – 命令模式 命令模式是数据驱动设计模式它是行为模式之一。 请求被作为命令的对象包装传递给invoker对象。 Invoker对象将命令传递到相应的对象并且该对象执行该命令。 例子 import java.util.ArrayList; import java.util.List; interface Command { void execute(); } class MouseCursor { private int x = 10; private int y = 10; public void move() { System.out.println("Old Position:"+x +":"+y); x++; y++; System.out.println("New Position:"+x +":"+y); } public void reset() { System.out.println("reset"); x = 10; y = 10; } } class MoveCursor implements Command { private MouseCursor abcStock; public MoveCursor(MouseCursor abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.move(); } } class ResetCursor implements Command { private MouseCursor abcStock; public ResetCursor(MouseCursor abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.reset(); } } class MouseCommands { private List<Command> orderList = new ArrayList<Command>(); public void takeOrder(Command order) { orderList.add(order); } public void...

Java 迭代器模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 迭代器模式

Java设计模式 – 迭代器模式 迭代器模式以顺序方式访问集合对象的元素,而不知道其底层表示。 迭代器模式是行为模式之一。 例子 interface Iterator { public boolean hasNext(); public Object next(); } class LetterBag { public String names[] = {"R" , "J" ,"A" , "L"}; public Iterator getIterator() { return new NameIterator(); } class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if(index < names.length){ return true; } return false; } @Override public Object next() { if(this.hasNext()){ return names[index++]; } return null; } } } public class Main { public static void main(String[] args) { LetterBag bag = new LetterBag(); for(Iterator iter = bag.getIterator(); iter.hasNext();){ String name = (String)iter.next(); System.out.println("Name : " + name); } } } 上面的代码生成以下结果。

Java 观察者模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 观察者模式

Java设计模式 – 观察者模式 观察者模式用于在一个对象被修改时通知其相关对象。 观察者模式是一种行为模式类别。 例子 import java.util.ArrayList; import java.util.List; class MyValue { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer){ observers.add(observer); } public void notifyAllObservers(){ for (Observer observer : observers) { observer.update(); } } } abstract class Observer { protected MyValue subject; public abstract void update(); } class PrinterObserver extends Observer{ public PrinterObserver(MyValue subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println("Printer: " + subject.getState() ); } } class EmailObserver extends Observer{ public EmailObserver(MyValue subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println("Email: "+ subject.getState() ); } } class FileObserver extends...