bread, coffee and coding
Design Patterns D-1 본문

더보기
package org.example;
interface FlyBehavior {
public void fly();
}
class FlyWithWings implements FlyBehavior{
@Override
public void fly() {
System.out.println("날아다닌다");
}
}
class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("날지못한다");
}
}
interface QuackBehavior{
void quakc();
}
class Quack implements QuackBehavior{
@Override
public void quakc() {
}
}
class Squeck implements QuackBehavior{
@Override
public void quakc() {
}
}
class MuteQuack implements QuackBehavior{
@Override
public void quakc() {
}
}
interface Flyable{
void fly();
}
interface Quackable{
void quack();
}
class Duck {
//has-a (포함) is -a (상속)
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void swim(){
}
public void display(){
}
}
class MallerdDuck extends Duck {
MallerdDuck(){
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
@Override
public void display() {
System.out.println("MallerDuck~~");
}
}
class RedheadDuck extends Duck implements Flyable,Quackable {
@Override
public void display() {
System.out.println("ReadhaedDuck~~");
}
@Override
public void fly() {
}
@Override
public void quack() {
}
}
class RubberDuck extends Duck implements Quackable {
RubberDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new MuteQuack();
}
@Override
public void quack() {
}
}
class DecoyDuck extends Duck {
@Override
public void display() {
super.display();
}
}
public class Main {
public static void main(String[] args) {
MallerdDuck duck1 = new MallerdDuck();
RedheadDuck duck2 = new RedheadDuck();
RubberDuck rubberDuck = new RubberDuck();
duck1.display();
duck2.display();
duck1.flyBehavior.fly();
rubberDuck.flyBehavior.fly();
rubberDuck.quackBehavior.quakc();
}
}
'Design Patterns' 카테고리의 다른 글
| Design Patterns Quiz (Observer) (0) | 2021.07.15 |
|---|