CodeGym /Курсове /Java Core /Интерфейсът е повече от интерфейс. Това е поведение.

Интерфейсът е повече от интерфейс. Това е поведение.

Java Core
Ниво, Урок
На разположение

„Здравей, Амиго! Отново съм аз. Искам да ти дам друга гледна точка за интерфейсите. Виждаш ли, през повечето време един клас е модел на конкретен обект. За разлика от това интерфейсите са по-скоро като способности на обект or роли, а не самия обект."

Например неща като автомобor, велосипеди, мотоциклети и колела са най-добре представени като класове и обекти. Но техните способности, като „Мога да се движа“, „Мога да нося хора“ и „Мога да паркирам“, са по-добре представени като интерфейси. Вижте този пример:

Java code Описание
interface Moveable
{
void move(String newAddress);
}
Съответства на способността за движение.
interface Driveable
{
void drive(Driver driver);
}
Съответства на способността за движение.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Съответства на способността за пренасяне на товари.
class Wheel implements Moveable
{
...
}
Клас "колело". Има способността да се движи.
class Car implements Moveable, Drivable, Transport
{
...
}
Клас "автомобил". Има способността да се движи, да се управлява от човек и да носи товари.
class Skateboard implements Moveable, Driveable
{
...
}
Клас "скейтборд". Има способността да се движи и да се контролира от човек.

Интерфейсите значително опростяват живота на програмиста. Програмите много често имат хиляди обекти, стотици класове и само няколко дузини интерфейси (роли). Има малко роли, но те могат да се комбинират по много начини (класове).

Целият смисъл е, че не е нужно да пишете code, дефиниращ взаимодействие с всеки друг клас. Всичко, което трябва да направите, е да взаимодействате с роли (интерфейси).

Представете си, че сте робот строител. Имате десетки подчинени роботи и всеки от тях може да има множество умения. Да предположим, че трябва спешно да завършите изграждането на стена. Просто взимате всички роботи, които имат способността да „строят“ и им казвате да построят стената. Всъщност не ви интересува кои роботи го правят. Нека да е роботизирана лейка. Ако знае How да строи, нека строи.

Ето How ще изглежда в code:

Java code Описание
static interface WallBuilder
{
void buildWall();
}
Способност за „изграждане на стена“. Разбира командата «изгради стена» (има съответния метод).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Роботи, които имат тази способност/умение.

Лейката не може да изгради стена (не реализира интерфейса WallBuilder).

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
Как да дадем команда за изграждане на стена?

„Това е невероятно интересно. Никога не съм си представял, че интерфейсите могат да бъдат толкова интересна тема.“

"И след това малко! Заедно с полиморфизма, това е напълно умопомрачително."

3
Задача
Java Core, ниво, урок
Заключено
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and assimilate some material. What's more, you combat laziness.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION