模式简析
代码实现
public class Test1 {
public static void main(String[] args) {
ConcreteComponent cc = new ConcreteComponent();
ConcreteDecoratorA cda = new ConcreteDecoratorA();
ConcreteDecoratorB cdb = new ConcreteDecoratorB();
cda.setComponent(cc);
cdb.setComponent(cda);
cdb.Operator();
}
}
abstract class Component{
public abstract void Operator();
}
class ConcreteComponent extends Component{
@Override
public void Operator() {
System.out.println("具体对象的操作");
}
}
abstract class Decorator extends Component{
protected Component component;
public void setComponent(Component component) {
this.component = component;
}
public void Operator() {
if(component != null) {
component.Operator();
}
}
}
class ConcreteDecoratorA extends Decorator{
private String addedState;
public void Operator() {
super.Operator();
addedState = "New state";
System.out.println("具体装饰对象A的操作");
}
}
class ConcreteDecoratorB extends Decorator{
public void Operator() {
super.Operator();
addedBehavior();
System.out.println("具体装饰对象B的操作");
}
public void addedBehavior() {
System.out.println("BBBBBBBBBBBBBBB");
}
}
案例一
public class Test2 {
public static void main(String[] args) {
HighCN hc = new HighCN();
hc.setName("姚明");
RichCN rc = new RichCN();
rc.setName("马云");
HighRichUSA hra = new HighRichUSA();
hra.setName("Tom");
hc.Desc();
rc.Desc();
hra.Desc();
}
}
abstract class Person{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void Desc();
}
class Chinese extends Person{
@Override
public void Desc() {
System.out.println(name+"是中国人");
}
}
class USA extends Person{
@Override
public void Desc() {
System.out.println(name+"是美国人");
}
}
class HighCN extends Chinese{
public void Desc() {
super.Desc();
System.out.println("高");
}
}
class RichCN extends Chinese{
public void Desc() {
super.Desc();
System.out.println("富");
}
}
class HighRichCN extends Chinese{
public void Desc() {
super.Desc();
System.out.println("高富");
}
}
class HighUSA extends USA{
public void Desc() {
super.Desc();
System.out.println("高");
}
}
class RichUSA extends USA{
public void Desc() {
super.Desc();
System.out.println("富");
}
}
class HighRichUSA extends USA{
public void Desc() {
super.Desc();
System.out.println("高富");
}
}
public class Test2 {
public static void main(String[] args) {
Person person = new Chinese();
person.setName("姚明");
HighCN hc = new HighCN(person);
hc.Desc();
person = new USA();
person.setName("Tom");
HighRichUSA hru = new HighRichUSA(person);
hru.Desc();
}
}
abstract class Person{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void Desc();
}
class Chinese extends Person{
@Override
public void Desc() {
System.out.println(name+"是中国人");
}
}
class USA extends Person{
@Override
public void Desc() {
System.out.println(name+"是美国人");
}
}
class HighCN {
Person person;
public HighCN(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("高");
}
}
class RichCN {
Person person;
public RichCN(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("富");
}
}
class HighRichCN {
Person person;
public HighRichCN(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("高富");
}
}
class HighUSA {
Person person;
public HighUSA(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("高");
}
}
class RichUSA {
Person person;
public RichUSA(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("富");
}
}
class HighRichUSA {
Person person;
public HighRichUSA(Person person) {
this.person = person;
}
public void Desc() {
person.Desc();
System.out.println("高富");
}
}
public class Test2 {
public static void main(String[] args) {
Person person = new Chinese();
person.setName("姚明");
HighCN hc = new HighCN(person);
hc.Desc();
person = new USA();
person.setName("Tom");
HighRichUSA hru = new HighRichUSA(person);
hru.Desc();
}
}
abstract class Person{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void Desc();
}
class Chinese extends Person{
@Override
public void Desc() {
System.out.println(name+"是中国人");
}
}
class USA extends Person{
@Override
public void Desc() {
System.out.println(name+"是美国人");
}
}
abstract class DecoratorPerson extends Person{
Person person;
public DecoratorPerson(Person person) {
this.person = person;
}
}
class HighCN extends DecoratorPerson{
public HighCN(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("高");
}
}
class RichCN extends DecoratorPerson{
public RichCN(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("富");
}
}
class HighRichCN extends DecoratorPerson{
public HighRichCN(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("高富");
}
}
class HighUSA extends DecoratorPerson{
public HighUSA(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("高");
}
}
class RichUSA extends DecoratorPerson{
public RichUSA(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("富");
}
}
class HighRichUSA extends DecoratorPerson{
public HighRichUSA(Person person) {
super(person);
}
public void Desc() {
person.Desc();
System.out.println("高富");
}
}
实列二
public class Test3 {
public static void main(String[] args) {
Person1 person1 = new Person1();
System.out.println("\n第一种装扮:");
Sneakers pqx = new Sneakers();
BigTrouser kk = new BigTrouser();
TShirts dtx = new TShirts();
pqx.Decorate(person1);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.Show();
}
}
abstract class Component1{
public abstract void Show();
}
class Person1 extends Component1{
private String name;
public Person1() {
}
public Person1(String name) {
this.name = name;
}
@Override
public void Show() {
System.out.println("装扮");
}
}
class Finery extends Component1{
protected Component1 component1;
public void Decorate(Component1 component1) {
this.component1 = component1;
}
@Override
public void Show() {
if(component1 != null) {
component1.Show();
}
}
}
class TShirts extends Finery {
public void Show() {
System.out.println("大T恤 ");
super.Show();
}
}
class BigTrouser extends Finery {
public void Show() {
System.out.println("垮裤 ");
super.Show();
}
}
class Sneakers extends Finery {
public void Show() {
System.out.println("破球鞋 ");
super.Show();
}
}
class Suit extends Finery {
public void Show() {
System.out.println("西装 ");
super.Show();
}
}
class Tie extends Finery {
public void Show() {
System.out.println("领带 ");
super.Show();
}
}
class LeatherShoes extends Finery {
public void Show() {
System.out.println("皮鞋 ");
super.Show();
}
}
以上部分摘取自朱红梅老师2020年5月的课件。