System.out.println(it.currentItem().toString()); it.next(); } }
public static void main(String args[]) {
Client client=new Client(); client.operation(); } }
10,bridge模式理解
public abstract class Airplane {
public sbstract void fly();
protected AirplaneMaker airplaneMaker; //桥在哪??桥在这里!! }
22
设计模式
public class PassengerPlane extends Airplane {
public void fly() {
System.out.println(\ } }
public CargoPlane Extends Airplane {
public void fly() {
System.out.println(\ } }
public abstract class AirplaneMaker {
public abstract void produce(); }
public class Airbus extends AirplaneMaker{ public void produce() {
System.out.println(\} }
public class Boeing extends AirplaneMaker{ public void produce() {
System.out.println(\} }
public class MD extends AirplaneMaker{ public void produce() {
System.out.println(\ produce\} }
public class test {
23
设计模式
public static void main(String args[]) {
PassengerPlane plane=new PassengerPlane(); plane.airplaneMaker=new MD(); plane.airplaneMaker.produce();
plane.airplaneMaker=new Airbus();
//之所以能变化,是因为桥这里可以重新选择制造商 plane.airplaneMaker.produce(); } }
使用此模式的前提是客户端并不深究得到的产品是抽象的n维(本例子里是2维)和行为的m维(本例子里是2维)这n*m中的具体那一种,行为那边的变化也只是m个变化,实际上一个具体一个行为只有一个确定的形式,之所以能够变化是抽象它有m个具体行为可以选择!
换句话说,这个桥他是单向的,只能从抽象这一头度到行为那一头!
public CargoPlane Extends Airplane {
public void fly() {
System.out.println(\ //
//这里可以进行一些委派 , airplaneMaker.produce(); //但是反过来不行 } }
11,责任链模式
解释:在一个公司的管理系统中,可以自己申请加薪。
比如你对你的工资不满意,要求申请加薪,但是本部门,行政部,和总裁办都可以给员工加薪,但是加薪的幅度有大有小,你可以向你本部门申请加薪,比如我在技术部
技术部最多给员工加500元,如果小于500,本部门就可以自己执行。如果员工申请的数量大于1000,就要由行政部执行! 如过大于2000,就要由总裁办执行!!
package cor;
public abstract class Dept { protected Dept successor;
public abstract void addSalary(int money); public Dept getSuccessor(){
24
设计模式
return this.successor; }
public void SetSuccessor(Dept dept){ this.successor=dept; } }
/************************************************/ package cor;
public class TechDept extends Dept { //protected Dept successor;
public void addSalary(int money) { if(money > 500){
System.out.println(\转发admin:salary\ this.getSuccessor().addSalary(2500); }else{
addSalary(money); } } }
/************************************************/ package cor;
public class AdminDept extends Dept { //protected Dept successor;
public void addSalary(int money) { if(money > 1000){
System.out.println(\转发pres\ getSuccessor().addSalary(2500); }else{
addSalary(money); } } }
/************************************************/
package cor;
25
设计模式
public class President extends Dept { //protected Dept successor;
public void addSalary(int money) { if(money> 2000){
System.out.println(\处理\ // addSalary();
// System.out.println(\加完后的薪水\ } }
/************************************************/
package cor;
public class Main {
public Main() { }
public static void main(String[] args) { Dept pre = new President();
Dept admin = new AdminDept(); Dept dept = new TechDept(); dept.SetSuccessor(admin); admin.SetSuccessor(pre); dept.addSalary(2500); } }
12,Observer模式理解
import java.util.*;
public abstract class Subject {
private Vector observers_vector=new Vector(); public void add_ob(Observer observer) {
observers_vector.add(observer); }
public void remove_from(Observer observer) {
observers_vector.remove(observer); }
public void notify_all()
26
设计模式