/*双向耦合代码
public class Main {
public static void main(String args[])
{
Secretary s = new Secretary();
StockObserver s1 = new StockObserver("小明",s);
StockObserver s2 = new StockObserver("小红",s);
s.Attach(s1);
s.Attach(s2);
s.setAction("老板回来了!");
s.Notify();
}
}
class Secretary{
private ArrayList<StockObserver> observers = new ArrayList<StockObserver>();
private String action;
public void Attach(StockObserver observer) {
observers.add(observer);
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public void Notify() {
for(StockObserver s:observers) {
System.out.println(this.getAction()+s.Update());
}
}
}
class StockObserver{
private String name;
private Secretary sub;
public StockObserver(String name, Secretary sub) {
super();
this.name = name;
this.sub = sub;
}
public String Update() {
return (this.name+"关闭股票行情,继续工作!");
}
}
解耦实践一
abstract class Observer{
protected String name;
protected Secretary sub;
public Observer(String name,Secretary sub) {
this.name = name;
this.sub = sub;
}
public abstract String Update();
}
class StockObserver extends Observer{
public StockObserver(String name,Secretary sub) {
super(name, sub);
}
public String Update() {
// TODO Auto-generated method stub
return this.name+"关闭股票行情,继续工作!";
}
}
class NBAObserver extends Observer{
public NBAObserver(String name,Secretary sub) {
super(name, sub);
}
public String Update() {
// TODO Auto-generated method stub
return this.name+"关闭NBA直播,继续工作!";
}
}
class Secretary{
private ArrayList<Observer> observers = new ArrayList<Observer>();
private String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public void Attach(Observer observer) {
observers.add(observer);
}
public void Detach(Observer observer) {
observers.remove(observer);
}
public void Notify() {
for(Observer o:observers) {
System.out.println(this.getAction()+o.Update());
}
}
}
public class Main {
public static void main(String args[])
{
Secretary s = new Secretary();
StockObserver s1 = new StockObserver("小明",s);
NBAObserver s2 = new NBAObserver("小红",s);
s.Attach(s1);
s.Attach(s2);
s.Detach(s1);
s.setAction("老板回来了!");
s.Notify();
}
}
解耦实践二
interface Subject{
void Attach(Observer observer);
void Detach(Observer observer);
void Notify();
}
class Boss implements Subject{
private ArrayList<Observer> observers = new ArrayList<Observer>();
private String action;
public void Attach(Observer observer) {
// TODO Auto-generated method stub
observers.add(observer);
}
public void Detach(Observer observer) {
// TODO Auto-generated method stub
observers.remove(observer);
}
public void Notify() {
// TODO Auto-generated method stub
for(Observer o:observers) {
System.out.println(this.getAction()+o.Update());
}
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
abstract class Observer{
protected String name;
protected Subject sub;
public Observer(String name, Subject sub) {
super();
this.name = name;
this.sub = sub;
}
public abstract String Update();
}
class StockObserver extends Observer{
public StockObserver(String name,Subject sub) {
super(name, sub);
}
public String Update() {
// TODO Auto-generated method stub
return this.name+"关闭股票行情,继续工作!";
}
}
class NBAObserver extends Observer{
public NBAObserver(String name,Subject sub) {
super(name, sub);
}
public String Update() {
// TODO Auto-generated method stub
return this.name+"关闭NBA直播,继续工作!";
}
}
public class Main {
public static void main(String args[])
{
Boss s = new Boss();
StockObserver s1 = new StockObserver("小明",s);
NBAObserver s2 = new NBAObserver("小红",s);
s.Attach(s1);
s.Attach(s2);
s.Detach(s1);
s.setAction("我胡汉三回来了!");
s.Notify();
}
}
观察者模式1
最新推荐文章于 2024-08-20 00:23:27 发布